package com.agent.generator.config;

import lombok.Data;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * AI生成任务的RabbitMQ配置
 * 包含队列、交换机及绑定关系定义
 */
@Configuration
@ConfigurationProperties(prefix = "rabbitmq.ai.generate")
@Data
public class AiGenerateRabbitConfig {

    /**
     * 交换机名称
     */
    private String exchange;

    /**
     * 路由键
     */
    private String routingKey;

    /**
     * 队列名称
     */
    private String queue;

    /**
     * 声明AI生成任务队列
     * 队列持久化，确保服务重启后任务不丢失
     */
    @Bean
    public Queue aiGenerateQueue() {
        // 参数说明：队列名、是否持久化、是否排他、是否自动删除
        return new Queue(queue, true, false, false);
    }

    /**
     * 声明AI生成任务交换机
     * 交换机持久化
     */
    @Bean
    public DirectExchange aiGenerateExchange() {
        // 参数说明：交换机名、是否持久化、是否自动删除
        return new DirectExchange(exchange, true, false);
    }

    /**
     * 绑定队列到交换机
     */
    @Bean
    public Binding aiGenerateBinding(Queue aiGenerateQueue, DirectExchange aiGenerateExchange) {
        return BindingBuilder.bind(aiGenerateQueue)
                .to(aiGenerateExchange)
                .with(routingKey);
    }
}
